Коллекции (составные типы данных): list (список)


Определения

Список - набор данных, где данные можно извлечь по индексу (номеру, но от 0) в списке.

Можно представлять список по-разному - например, как

  • набор записей на листе; записи можно вычеркивать или добавлять новые.
  • составной стол в кафе/ресторане, который получают сдвигая столики для новых посетителей. Каждый столик из составного имеет свой индекс (первый столик имеет индекс 0, второй - 1 и т.д.). Можно попросить что-то со столика под индексом 0, но если например столиков 5, а попросить со столика с индексом 7 (которого нет, он был бы, если бы столиков было хотя бы 8), то будет ошибка. Так же попытка отнести что-то на столик с индексом 7 вызовет падение блюда на пол :(
  • Шкафчик с набором проиндексированных полок, где можно добавлять/вытаскивать полки (правда у списка может быть сколько угодно "полок").

Примеры

Создание списка и добавление к нему элементов

В примере ниже мы создадим два списка - пустой и с несколькими именами, потом проверим их длину, добавим несколько элементов (добавлять будем собственной функцией списка .append(...)).

Длина списка

Длину списка можно узнать с помощью встроенной в Python функции len(список).

Добавление к списку элементов других списков

Чтобы изменить первоначальный список, используется функция .extend(...) - она ничего не возвращает!

Если же мы хотим создать новый список - используем оператов сложения +:

Извлечение элементов списка через индексы

В языках программирования нумерация идет 0, т.е. если вы хотите получить 1-ый элемент, надо вписать индекс 0, если 2-ой - индекс 1 и т.д. Номер называется индексом. Элемент извлекается с обращением к списку через квадратные скобки - список[индекс].

Так же в Python'e можно извлекать элементы с конца, даже не зная, какова длина списка: последний элемент - с индексом -1, предпоследний - -2 и т.д.

Как удалять элементы из списка

Для этого подходят собственные функции списка .pop(...) и .remove(...):

  • pop(индекс) - удаляет последний элемент списка с данным индексом и одновременно его возвращает; если не вписать индекс, удалит последний элемент списка;
  • remove(значение) - удаляет значение из списка, если оно есть в списке (а если нет, программа закончится с ошибкой!) - она ничего не возвращает!

Извлечение частей списка в новые списки по индексам

Если мы хотим получить новый список например из скольких-то первых/последних значений, или от индекса до индекса, то обычно используется синтаксис список[начало:конец], так, что будут взяты элементы с индексами в интервале

  • начало - индекс первого элемента, который будет взят в список. Если пропустить, то Python вставит значение 0.
  • конец - индекс последнего элемента, который уже не будет взят в список. Если пропустить, то Python вставит значение len(список).

Разворот списка

Если хотим развернуть сам начальный список - для этого есть собств. функц. списка .reverse().

Если хотим получить новый список, где элементы развернуты, надо писать список[::-1], здесь последний парамет - это шаг. Это сокращенный вариант полного синтаксиса список[начало:конец:шаг]. Здесь двоеточия два, чтобы сказать Python'у, что индексы начало и конец пропущены (перед первым : пусто, между первым и вторым тоже).

Фильтрация списков по значениям

Короткий способ для простых условий

Для примера, мы положим в один новый список только те цифры, которые больше 5, а в другой - те, которые меньше 0:

Фильтрация списков по значениям

Длинный способ для более сложных операций


Вопросы

Что будет выведено экран после запуска данного кода?

imena = ["Геннадий", "Даниил", "Екатерина", "Зинаида", "Ирина"]
imena.pop(1)
print(imena)
imena.remove("Ира")
print(imena)

Что будет выведено экран после запуска данного кода?

cisla = [1, 2, 4, 8, 16]
eshio_cisla = [3, 5, 7, 11, 13]
cisla = cisla[:2] + eshio_cisla[1:4]
cisla.extend(eshio_cisla[3:])
print(cisla)


Упражнения

Напишите функцию `mozaika`, которая принимает два списка одинаковой длины и создает новый список, где элементы из списков чередуются, например mozaika([1,2], [11,12]) -> [1,11,2,12]

def mozaika(lst1, lst2):
    # напишите код
print( mozaika([1,2], [11,12]) ) # -> [1,11,2,12]
print( mozaika(["a", "b", "c"], ["A", "B", "C"]) ) # -> ["a", "A", "b", "B", "c", "C"]


Домашние задания

Напишите функцию pomeniat_krainie(lst), которая принимает список lst и выдает новый список, где первый и последний элемент поменяны местами по сравнению с lst. В данном списке lst минимум 2 элемента.

def pomeniat_krainie(lst):
    # напишите код
print(pomeniat_krainie([1,2]))  # должно вывести [2, 1]
print(pomeniat_krainie([67,2,1]))  # должно вывевсти [1, 2, 67]
print(pomeniat_krainie([1,2,3,4,5,6,7,8,9,1]))  # должно вывести то же самое
print(pomeniat_krainie(list(range(32))))  # должно вывести [31, 1, 2, ..., 30, 0]


Следующая тема: dict (словарь)